package com;

public class Datahandling {
    /*
     *难点：将棋盘上的位置转换为map数组中的x,y
     *负责人:30.
     *功能:检查map数组，若发现某个方向上有5个1，则黑子玩家获胜，
     *     若是5个2则白子玩家获胜
     *     若返回值为true,则弹出恭喜黑/白方玩家胜利界面
     *参数:int map[][]
     *返回值:boolean
     */
    public boolean isWin(int map[][]) {  for (int x = 0; x < map.length; x++) {
        for (int y = 0; y < map[0].length; y++) {
            int color = map[x][y];
            if (color != 0) {

                if (checkDirection(x, y, 1, 0, color, 5,map) || // 横着的
                        checkDirection(x, y, 0, 1, color, 5,map) || // 竖着
                        checkDirection(x, y, 1, 1, color, 5,map) || // 右下
                        checkDirection(x, y, 1, -1, color, 5,map)) { // 左下
                    return true;//弹出胜利界面
                }
            }
        }
    }
        return false;
    }
    //辅助方法，判断输赢
    private  boolean checkDirection(int x, int y, int dx, int dy, int color, int n,int map[][]) {
        int count = 1; //表示当前颜色棋子出现一次
        int stepX = x + dx;
        int stepY = y + dy;
        while (stepX >= 0 && stepX < map.length && stepY >= 0 && stepY < map[0].length && map[stepX][stepY] == color) {
            count++;
            stepX += dx;
            stepY += dy;
        }
        return count >= n;
    }
}

